/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo.dominiogeometrico;

import modelo.primitivas.Punto;

/**
 *
 * @author Fredy
 */
public class Grilla {

    private int columnas;
    private int filas;
    private Punto puntoOrigen;
    private double extensionX;
    private double extensionY;


    public Grilla(int pColumnas, int pFilas, Punto pPuntoOrigen)
    {
        columnas = pColumnas;
        filas = pFilas;
        puntoOrigen = pPuntoOrigen;
    }

    /**
     * @return the puntosEnX
     */
    public int getColumnas() {
        return columnas;
    }

    /**
     * @param puntosEnX the puntosEnX to set
     */
    public void setColumnas(int pColumnas) {
        this.columnas = pColumnas;
    }

    /**
     * @return the puntosEnY
     */
    public int getFilas() {
        return filas;
    }

    /**
     * @param puntosEnY the puntosEnY to set
     */
    public void setFilas(int pFilas) {
        this.filas = pFilas;
    }

    public void setExtensionX(double pExtension) {
        this.extensionX = pExtension;
    }

    public double getExtensionX() {
        return extensionX;
    }

    public void setExtensionY(double pExtension) {
        this.extensionY = pExtension;
    }

    public double getExtensionY() {
        return extensionY;
    }

    /**
     * @return the puntoOrigenEnX
     */
    public Punto getPuntoOrigen() {
        return puntoOrigen;
    }

    /**
     * @param puntoOrigen the puntoOrigen to set
     */
    public void setPuntoOrigen(Punto pPuntoOrigen) {
        this.puntoOrigen = pPuntoOrigen;
    }

    public boolean puntoEnGrilla(Punto pPunto)
    {
        double espacioEntrePuntosX = extensionX / columnas;
        double espacioEntrePuntosY = extensionY / filas;
        double moduloX = pPunto.getCoordenadaX()%espacioEntrePuntosX;
        double moduloY = pPunto.getCoordenadaY()%espacioEntrePuntosY;
        if(moduloX == 0  && moduloY == 0)
            return true;
        else return false;
    }
    
    public Punto puntoGrillaMasCercano(Punto pPunto)
    {
        double nuevoX = 0;
        double nuevoY = 0;
        double espacioEntrePuntosX = extensionX / columnas;
        double espacioEntrePuntosY = extensionY / filas;
        double moduloX = pPunto.getCoordenadaX()%espacioEntrePuntosX;
        double moduloY = pPunto.getCoordenadaY()%espacioEntrePuntosY;
        double adicionarX = espacioEntrePuntosX-moduloX;
        double adicionarY = espacioEntrePuntosY-moduloY;
        if(moduloX<=adicionarX)
            nuevoX = pPunto.getCoordenadaX()-moduloX;
        else nuevoX = pPunto.getCoordenadaX()+adicionarX;
        
        if(moduloY<=adicionarY)
            nuevoY = pPunto.getCoordenadaY()-moduloY;
        else nuevoY = pPunto.getCoordenadaY()+adicionarY;
        
        return new Punto(nuevoX, nuevoY);
    }
    
    }


